INT_2D

The INT_2D function computes the double integral of a bivariate function using iterated Gaussian quadrature. The algorithm’s transformation data is provided in tabulated form with 15 decimal accuracy.

This routine is written in the IDL language. Its source code can be found in the file int_2d.pro in the lib subdirectory of the IDL distribution.

Examples

See Additional Examples for more information on using INT_2D.

Example 1

Compute the double integral of the bivariate function.

FUNCTION Fxy, x, y

   RETURN, y*COS(x^5)

END

; Define the limits of integration for y as a function of x:

FUNCTION PQ_Limits, x

   RETURN, [0.0, x^2]

END

; Define limits of integration for x:

AB_Limits = [0.0, 2.0]

; Using the function and limits defined above, integrate with 48

; and 96 point formulas using a dy-dx order of integration and

; double-precision arithmetic:

PRINT, INT_2D('Fxy', AB_Limits, 'PQ_Limits', 48, /DOUBLE)

PRINT, INT_2D('Fxy', AB_Limits, 'PQ_Limits', 96, /DOUBLE)

INT_2D with 48 transformation points yields: 0.055142668

INT_2D with 96 transformation points yields: 0.055142668

Syntax

Result = INT_2D( Fxy, AB_Limits, PQ_Limits, Pts [, /DOUBLE] [, /ORDER] )

Return Value

Returns a double value containing the integral.

Arguments

Fxy

A scalar string specifying the name of a user-supplied IDL function that defines the bivariate function to be integrated. For dy/dx integration (the default, or if the ORDER keyword is explicitly set to zero), the Fxy function must be able to accept a scalar value for X and a vector for Y, and must return a vector of the same length as Y. For dx/dy integration (if the ORDER keyword is set), the Fxy function must be able to accept a vector for X and a scalar value for Y, and must return a vector of the same length as X.

For example, if we wish to integrate the following function:

We define a function FXY to express this relationship in the IDL language:

FUNCTION fxy, X, Y

   RETURN, EXP(-X^2. -Y^2.)

END

AB_Limits

A two-element vector containing the lower (A) and upper (B) limits of integration with respect to the outside variable (dependent on ORDER). ORDER=0 will be dydx, in which case AB_Limits relates to the x-variable. ORDER=1 will be dxdy, in which case AB_Limits relates to the y-variable.

PQ_Limits

A scalar string specifying the name of a user-supplied IDL function that defines the lower (P(x)) and upper (Q(x)) limits of integration with respect to the inner variable (dependent on ORDER).

ORDER=0 will be dydx, in which case PQ_Limits relates to the y-variable. For example, you can write the following IDL function to represent the limits of integration with respect to y:

FUNCTION PQ_limits, X

   RETURN, [-SQRT(16.0 - X^2), SQRT(16.0 - X^2)]

END

ORDER=1 will be dxdy, in which case PQ_Limits relates to the x-variable. The function must accept x and return a two-element vector result. For example, you can write the following IDL function to represent the limits of integration with respect to x:

FUNCTION PQ_limits, Y

   RETURN, [-SQRT(16.0 - Y^2), SQRT(16.0 - Y^2)]

END

Pts

The number of transformation points used in the computation. Possible values are: 6, 10, 20, 48, or 96.

Keywords

DOUBLE

Set this keyword to force the computation to be done in double-precision arithmetic.

ORDER

A scalar value of either 0 or 1. If set to 0, the integral is computed using a dy-dx order of integration. If set to 1, the integral is computed using a dx-dy order of integration.

Additional Examples

Example 2

Compute the double integral of the bivariate function:

FUNCTION Fxy, x, y

   RETURN, y*COS(x^5)

END

; Define the limits of integration for y as a function of x:

FUNCTION PQ_Limits, y

   RETURN, [sqrt(y), 2.0]

END

; Define limits of integration for x:

AB_Limits = [0.0, 4.0]

; Using the function and limits defined above, integrate with 48

; and 96 point formulas using a dy-dx order of integration and

; double-precision arithmetic:

PRINT, INT_2D('Fxy', AB_Limits, 'PQ_Limits', 48, /DOUBLE, /ORDER)

PRINT, INT_2D('Fxy', AB_Limits, 'PQ_Limits', 96, /DOUBLE, /ORDER)

INT_2D with 48 transformation points yields: 0.055142678

INT_2D with 96 transformation points yields: 0.055142668

The exact solution (7 decimal accuracy) is: 0.055142668

Version History

Pre 4.0

Introduced

See Also

INT_3D, INT_TABULATED, QROMB, QROMO, QSIMP